package com.bdf.ipharma.service;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import com.bdf.ipharma.dao.UsuarioDAO;
import com.bdf.ipharma.dto.PairValue;
import com.bdf.ipharma.model.Usuario;
import com.bdf.ipharma.model.UsuarioPerfil;
import com.bdf.ipharma.model.bo.Asignacion;

/**
 * 
 * @author edw
 */
@Service("usuarioService")
public class UsuarioService {

	@Autowired
	private UsuarioDAO usuarioDao;

	private Logger logger = Logger.getLogger(UsuarioService.class);

	@Transactional(isolation = Isolation.SERIALIZABLE)
	public boolean insert(Usuario usuario) {
		logger.debug("begin insert at " + this.getClass().getName());
		usuarioDao.insert(usuario);
		logger.debug("end insert at " + this.getClass().getName());
		return true;
	}

	public List<Usuario> select() {
		logger.debug("begin select at " + this.getClass().getName());
		List<Usuario> contohs = usuarioDao.select();
		logger.debug("end select at " + this.getClass().getName());
		return contohs;
	}

	public Usuario login(String username, String password) {
		logger.debug("begin select at " + this.getClass().getName());
		Usuario user = usuarioDao.login(username, password);
		System.out.println("test");
		if (user != null) {
			logger.debug("login successfull de " + username);
			return user;
		} else {
			logger.debug("login Fail of " + username);
			return null;
		}
	}

	/**
	 * Obtiene todos los usuarios y sus perfiles.
	 * 
	 * @return
	 */

	public List<UsuarioPerfil> getUsuarioPerfiles() {
		logger.debug("begin select at " + this.getClass().getName());
		List<UsuarioPerfil> listUsuariosPerfiles = usuarioDao.getUsuarioPerfiles();
		logger.debug("end select at " + this.getClass().getName());
		return listUsuariosPerfiles;
	}

	public PairValue[] getAsignaciones() {
		logger.debug("begin select at " + this.getClass().getName());
		//List<Usuario> listUsuarioAsignaciones = usuarioDao.getAsignaciones();
		List<Asignacion> listAsignaciones = usuarioDao.getAsignaciones();
		PairValue[] values = new PairValue[listAsignaciones.size()+1];
		values[0] = new PairValue("", "blank");
		int i=1;
		for (Asignacion asignacion : listAsignaciones) {
			PairValue pairValue = new PairValue(asignacion.getDescripcion(), asignacion.getIdAsignacion().toString());
			values[i]= pairValue;
			i++;		
		}
		
		logger.debug("end select at " + this.getClass().getName());
		return values;
	}

}
